/*! jQuery Validation Plugin - v1.16.0 - 12/2/2016 * http://jqueryvalidation.org/ * Copyright (c) 2016 Jörn Zaefferer; Licensed MIT */ !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return!c.settings.submitHandler||(c.submitButton&&(d=a("").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e&&e)}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,b||(d=d.concat(c.errorList))}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(null!=j&&null!=j.form){if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}}),a.extend(a.expr.pseudos||a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){var c=a(b).val();return null!==c&&!!a.trim(""+c)},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:void 0===c?b:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||a.inArray(c.keyCode,d)!==-1||(b.name in this.submitted||b.name in this.invalid)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}."),step:a.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){!this.form&&this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]);var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c,d,e=this.clean(b),f=this.validationTargetFor(e),g=this,h=!0;return void 0===f?delete this.invalid[e.name]:(this.prepareElement(f),this.currentElements=a(f),d=this.groups[f.name],d&&a.each(this.groups,function(a,b){b===d&&a!==f.name&&(e=g.validationTargetFor(g.clean(g.findByName(a))),e&&e.name in g.invalid&&(g.currentElements.push(e),h=g.check(e)&&h))}),c=this.check(f)!==!1,h=h&&c,c?this.invalid[f.name]=!1:this.invalid[f.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),a(b).attr("aria-invalid",!c)),h},showErrors:function(b){if(b){var c=this;a.extend(this.errorMap,b),this.errorList=a.map(this.errorMap,function(a,b){return{message:a,element:c.findByName(b)[0]}}),this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var b=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(b)},resetElements:function(a){var b;if(this.settings.unhighlight)for(b=0;a[b];b++)this.settings.unhighlight.call(this,a[b],this.settings.errorClass,""),this.findByName(a[b].name).removeClass(this.settings.validClass);else a.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)a[b]&&c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){var d=this.name||a(this).attr("name");return!d&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.hasAttribute("contenteditable")&&(this.form=a(this).closest("form")[0]),!(d in c||!b.objectLength(a(this).rules()))&&(c[d]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([])},reset:function(){this.resetInternals(),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d,e=a(b),f=b.type;return"radio"===f||"checkbox"===f?this.findByName(b.name).filter(":checked").val():"number"===f&&"undefined"!=typeof b.validity?b.validity.badInput?"NaN":e.val():(c=b.hasAttribute("contenteditable")?e.text():e.val(),"file"===f?"C:\\fakepath\\"===c.substr(0,12)?c.substr(12):(d=c.lastIndexOf("/"),d>=0?c.substr(d+1):(d=c.lastIndexOf("\\"),d>=0?c.substr(d+1):c)):"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);if("function"==typeof f.normalizer){if(i=f.normalizer.call(b,i),"string"!=typeof i)throw new TypeError("The normalizer should return a string value.");delete f.normalizer}for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=". Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;aWarning: No message defined for "+b.name+""),e=/\$?\{(\d+)\}/g;return"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),d},formatAndAdd:function(a,b){var c=this.defaultMessage(a,b);this.errorList.push({message:c,element:a,method:b.method}),this.errorMap[a.name]=c,this.submitted[a.name]=c},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g,h=this.errorsFor(b),i=this.idOrName(b),j=a(b).attr("aria-describedby");h.length?(h.removeClass(this.settings.validClass).addClass(this.settings.errorClass),h.html(c)):(h=a("<"+this.settings.errorElement+">").attr("id",i+"-error").addClass(this.settings.errorClass).html(c||""),d=h,this.settings.wrapper&&(d=h.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement.call(this,d,a(b)):d.insertAfter(b),h.is("label")?h.attr("for",i):0===h.parents("label[for='"+this.escapeCssMeta(i)+"']").length&&(f=h.attr("id"),j?j.match(new RegExp("\\b"+this.escapeCssMeta(f)+"\\b"))||(j+=" "+f):j=f,a(b).attr("aria-describedby",j),e=this.groups[b.name],e&&(g=this,a.each(g.groups,function(b,c){c===e&&a("[name='"+g.escapeCssMeta(b)+"']",g.currentForm).attr("aria-describedby",h.attr("id"))})))),!c&&this.settings.success&&(h.text(""),"string"==typeof this.settings.success?h.addClass(this.settings.success):this.settings.success(h,b)),this.toShow=this.toShow.add(h)},errorsFor:function(b){var c=this.escapeCssMeta(this.idOrName(b)),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+this.escapeCssMeta(d).replace(/\s+/g,", #")),this.errors().filter(e)},escapeCssMeta:function(a){return a.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+this.escapeCssMeta(b)+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return!this.dependTypes[typeof a]||this.dependTypes[typeof a](a,b)},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(b){this.pending[b.name]||(this.pendingRequest++,a(b).addClass(this.settings.pendingClass),this.pending[b.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],a(b).removeClass(this.settings.pendingClass),c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b,c){return c="string"==typeof c&&c||"remote",a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,{method:c})})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max|step/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0===e.param||e.param:(a.data(c.form,"validator").resetElements(a(c)),delete b[d])}}),a.each(b,function(d,e){b[d]=a.isFunction(e)&&"normalizer"!==d?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},step:function(b,c,d){var e,f=a(c).attr("type"),g="Step attribute on input type "+f+" is not supported.",h=["text","number","range"],i=new RegExp("\\b"+f+"\\b"),j=f&&!i.test(h.join()),k=function(a){var b=(""+a).match(/(?:\.(\d+))?$/);return b&&b[1]?b[1].length:0},l=function(a){return Math.round(a*Math.pow(10,e))},m=!0;if(j)throw new Error(g);return e=k(d),(k(b)>e||l(b)%l(d)!==0)&&(m=!1),this.optional(c)||m},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.not(".validate-equalTo-blur").length&&e.addClass("validate-equalTo-blur").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d,e){if(this.optional(c))return"dependency-mismatch";e="string"==typeof e&&e||"remote";var f,g,h,i=this.previousValue(c,e);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),i.originalMessage=i.originalMessage||this.settings.messages[c.name][e],this.settings.messages[c.name][e]=i.message,d="string"==typeof d&&{url:d}||d,h=a.param(a.extend({data:b},d.data)),i.old===h?i.valid:(i.old=h,f=this,this.startRequest(c),g={},g[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:g,context:f.currentForm,success:function(a){var d,g,h,j=a===!0||"true"===a;f.settings.messages[c.name][e]=i.originalMessage,j?(h=f.formSubmitted,f.resetInternals(),f.toHide=f.errorsFor(c),f.formSubmitted=h,f.successList.push(c),f.invalid[c.name]=!1,f.showErrors()):(d={},g=a||f.defaultMessage(c,{method:e,parameters:b}),d[c.name]=i.message=g,f.invalid[c.name]=!0,f.showErrors(d)),i.valid=j,f.stopRequest(c,j)}},d)),"pending")}}});var b,c={};return a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)}),a}); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlcyI6WyJqcXVlcnkudmFsaWRhdGUubWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISBqUXVlcnkgVmFsaWRhdGlvbiBQbHVnaW4gLSB2MS4xNi4wIC0gMTIvMi8yMDE2XG4gKiBodHRwOi8vanF1ZXJ5dmFsaWRhdGlvbi5vcmcvXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSsO2cm4gWmFlZmZlcmVyOyBMaWNlbnNlZCBNSVQgKi9cbiFmdW5jdGlvbihhKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSxhKTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hKHJlcXVpcmUoXCJqcXVlcnlcIikpOmEoalF1ZXJ5KX0oZnVuY3Rpb24oYSl7YS5leHRlbmQoYS5mbix7dmFsaWRhdGU6ZnVuY3Rpb24oYil7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB2b2lkKGImJmIuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4oXCJOb3RoaW5nIHNlbGVjdGVkLCBjYW4ndCB2YWxpZGF0ZSwgcmV0dXJuaW5nIG5vdGhpbmcuXCIpKTt2YXIgYz1hLmRhdGEodGhpc1swXSxcInZhbGlkYXRvclwiKTtyZXR1cm4gYz9jOih0aGlzLmF0dHIoXCJub3ZhbGlkYXRlXCIsXCJub3ZhbGlkYXRlXCIpLGM9bmV3IGEudmFsaWRhdG9yKGIsdGhpc1swXSksYS5kYXRhKHRoaXNbMF0sXCJ2YWxpZGF0b3JcIixjKSxjLnNldHRpbmdzLm9uc3VibWl0JiYodGhpcy5vbihcImNsaWNrLnZhbGlkYXRlXCIsXCI6c3VibWl0XCIsZnVuY3Rpb24oYil7Yy5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyJiYoYy5zdWJtaXRCdXR0b249Yi50YXJnZXQpLGEodGhpcykuaGFzQ2xhc3MoXCJjYW5jZWxcIikmJihjLmNhbmNlbFN1Ym1pdD0hMCksdm9pZCAwIT09YSh0aGlzKS5hdHRyKFwiZm9ybW5vdmFsaWRhdGVcIikmJihjLmNhbmNlbFN1Ym1pdD0hMCl9KSx0aGlzLm9uKFwic3VibWl0LnZhbGlkYXRlXCIsZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpe3ZhciBkLGU7cmV0dXJuIWMuc2V0dGluZ3Muc3VibWl0SGFuZGxlcnx8KGMuc3VibWl0QnV0dG9uJiYoZD1hKFwiPGlucHV0IHR5cGU9J2hpZGRlbicvPlwiKS5hdHRyKFwibmFtZVwiLGMuc3VibWl0QnV0dG9uLm5hbWUpLnZhbChhKGMuc3VibWl0QnV0dG9uKS52YWwoKSkuYXBwZW5kVG8oYy5jdXJyZW50Rm9ybSkpLGU9Yy5zZXR0aW5ncy5zdWJtaXRIYW5kbGVyLmNhbGwoYyxjLmN1cnJlbnRGb3JtLGIpLGMuc3VibWl0QnV0dG9uJiZkLnJlbW92ZSgpLHZvaWQgMCE9PWUmJmUpfXJldHVybiBjLnNldHRpbmdzLmRlYnVnJiZiLnByZXZlbnREZWZhdWx0KCksYy5jYW5jZWxTdWJtaXQ/KGMuY2FuY2VsU3VibWl0PSExLGQoKSk6Yy5mb3JtKCk/Yy5wZW5kaW5nUmVxdWVzdD8oYy5mb3JtU3VibWl0dGVkPSEwLCExKTpkKCk6KGMuZm9jdXNJbnZhbGlkKCksITEpfSkpLGMpfSx2YWxpZDpmdW5jdGlvbigpe3ZhciBiLGMsZDtyZXR1cm4gYSh0aGlzWzBdKS5pcyhcImZvcm1cIik/Yj10aGlzLnZhbGlkYXRlKCkuZm9ybSgpOihkPVtdLGI9ITAsYz1hKHRoaXNbMF0uZm9ybSkudmFsaWRhdGUoKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtiPWMuZWxlbWVudCh0aGlzKSYmYixifHwoZD1kLmNvbmNhdChjLmVycm9yTGlzdCkpfSksYy5lcnJvckxpc3Q9ZCksYn0scnVsZXM6ZnVuY3Rpb24oYixjKXt2YXIgZCxlLGYsZyxoLGksaj10aGlzWzBdO2lmKG51bGwhPWomJm51bGwhPWouZm9ybSl7aWYoYilzd2l0Y2goZD1hLmRhdGEoai5mb3JtLFwidmFsaWRhdG9yXCIpLnNldHRpbmdzLGU9ZC5ydWxlcyxmPWEudmFsaWRhdG9yLnN0YXRpY1J1bGVzKGopLGIpe2Nhc2VcImFkZFwiOmEuZXh0ZW5kKGYsYS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZShjKSksZGVsZXRlIGYubWVzc2FnZXMsZVtqLm5hbWVdPWYsYy5tZXNzYWdlcyYmKGQubWVzc2FnZXNbai5uYW1lXT1hLmV4dGVuZChkLm1lc3NhZ2VzW2oubmFtZV0sYy5tZXNzYWdlcykpO2JyZWFrO2Nhc2VcInJlbW92ZVwiOnJldHVybiBjPyhpPXt9LGEuZWFjaChjLnNwbGl0KC9cXHMvKSxmdW5jdGlvbihiLGMpe2lbY109ZltjXSxkZWxldGUgZltjXSxcInJlcXVpcmVkXCI9PT1jJiZhKGopLnJlbW92ZUF0dHIoXCJhcmlhLXJlcXVpcmVkXCIpfSksaSk6KGRlbGV0ZSBlW2oubmFtZV0sZil9cmV0dXJuIGc9YS52YWxpZGF0b3Iubm9ybWFsaXplUnVsZXMoYS5leHRlbmQoe30sYS52YWxpZGF0b3IuY2xhc3NSdWxlcyhqKSxhLnZhbGlkYXRvci5hdHRyaWJ1dGVSdWxlcyhqKSxhLnZhbGlkYXRvci5kYXRhUnVsZXMoaiksYS52YWxpZGF0b3Iuc3RhdGljUnVsZXMoaikpLGopLGcucmVxdWlyZWQmJihoPWcucmVxdWlyZWQsZGVsZXRlIGcucmVxdWlyZWQsZz1hLmV4dGVuZCh7cmVxdWlyZWQ6aH0sZyksYShqKS5hdHRyKFwiYXJpYS1yZXF1aXJlZFwiLFwidHJ1ZVwiKSksZy5yZW1vdGUmJihoPWcucmVtb3RlLGRlbGV0ZSBnLnJlbW90ZSxnPWEuZXh0ZW5kKGcse3JlbW90ZTpofSkpLGd9fX0pLGEuZXh0ZW5kKGEuZXhwci5wc2V1ZG9zfHxhLmV4cHJbXCI6XCJdLHtibGFuazpmdW5jdGlvbihiKXtyZXR1cm4hYS50cmltKFwiXCIrYShiKS52YWwoKSl9LGZpbGxlZDpmdW5jdGlvbihiKXt2YXIgYz1hKGIpLnZhbCgpO3JldHVybiBudWxsIT09YyYmISFhLnRyaW0oXCJcIitjKX0sdW5jaGVja2VkOmZ1bmN0aW9uKGIpe3JldHVybiFhKGIpLnByb3AoXCJjaGVja2VkXCIpfX0pLGEudmFsaWRhdG9yPWZ1bmN0aW9uKGIsYyl7dGhpcy5zZXR0aW5ncz1hLmV4dGVuZCghMCx7fSxhLnZhbGlkYXRvci5kZWZhdWx0cyxiKSx0aGlzLmN1cnJlbnRGb3JtPWMsdGhpcy5pbml0KCl9LGEudmFsaWRhdG9yLmZvcm1hdD1mdW5jdGlvbihiLGMpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbigpe3ZhciBjPWEubWFrZUFycmF5KGFyZ3VtZW50cyk7cmV0dXJuIGMudW5zaGlmdChiKSxhLnZhbGlkYXRvci5mb3JtYXQuYXBwbHkodGhpcyxjKX06dm9pZCAwPT09Yz9iOihhcmd1bWVudHMubGVuZ3RoPjImJmMuY29uc3RydWN0b3IhPT1BcnJheSYmKGM9YS5tYWtlQXJyYXkoYXJndW1lbnRzKS5zbGljZSgxKSksYy5jb25zdHJ1Y3RvciE9PUFycmF5JiYoYz1bY10pLGEuZWFjaChjLGZ1bmN0aW9uKGEsYyl7Yj1iLnJlcGxhY2UobmV3IFJlZ0V4cChcIlxcXFx7XCIrYStcIlxcXFx9XCIsXCJnXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIGN9KX0pLGIpfSxhLmV4dGVuZChhLnZhbGlkYXRvcix7ZGVmYXVsdHM6e21lc3NhZ2VzOnt9LGdyb3Vwczp7fSxydWxlczp7fSxlcnJvckNsYXNzOlwiZXJyb3JcIixwZW5kaW5nQ2xhc3M6XCJwZW5kaW5nXCIsdmFsaWRDbGFzczpcInZhbGlkXCIsZXJyb3JFbGVtZW50OlwibGFiZWxcIixmb2N1c0NsZWFudXA6ITEsZm9jdXNJbnZhbGlkOiEwLGVycm9yQ29udGFpbmVyOmEoW10pLGVycm9yTGFiZWxDb250YWluZXI6YShbXSksb25zdWJtaXQ6ITAsaWdub3JlOlwiOmhpZGRlblwiLGlnbm9yZVRpdGxlOiExLG9uZm9jdXNpbjpmdW5jdGlvbihhKXt0aGlzLmxhc3RBY3RpdmU9YSx0aGlzLnNldHRpbmdzLmZvY3VzQ2xlYW51cCYmKHRoaXMuc2V0dGluZ3MudW5oaWdobGlnaHQmJnRoaXMuc2V0dGluZ3MudW5oaWdobGlnaHQuY2FsbCh0aGlzLGEsdGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzLHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyksdGhpcy5oaWRlVGhlc2UodGhpcy5lcnJvcnNGb3IoYSkpKX0sb25mb2N1c291dDpmdW5jdGlvbihhKXt0aGlzLmNoZWNrYWJsZShhKXx8IShhLm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQpJiZ0aGlzLm9wdGlvbmFsKGEpfHx0aGlzLmVsZW1lbnQoYSl9LG9ua2V5dXA6ZnVuY3Rpb24oYixjKXt2YXIgZD1bMTYsMTcsMTgsMjAsMzUsMzYsMzcsMzgsMzksNDAsNDUsMTQ0LDIyNV07OT09PWMud2hpY2gmJlwiXCI9PT10aGlzLmVsZW1lbnRWYWx1ZShiKXx8YS5pbkFycmF5KGMua2V5Q29kZSxkKSE9PS0xfHwoYi5uYW1lIGluIHRoaXMuc3VibWl0dGVkfHxiLm5hbWUgaW4gdGhpcy5pbnZhbGlkKSYmdGhpcy5lbGVtZW50KGIpfSxvbmNsaWNrOmZ1bmN0aW9uKGEpe2EubmFtZSBpbiB0aGlzLnN1Ym1pdHRlZD90aGlzLmVsZW1lbnQoYSk6YS5wYXJlbnROb2RlLm5hbWUgaW4gdGhpcy5zdWJtaXR0ZWQmJnRoaXMuZWxlbWVudChhLnBhcmVudE5vZGUpfSxoaWdobGlnaHQ6ZnVuY3Rpb24oYixjLGQpe1wicmFkaW9cIj09PWIudHlwZT90aGlzLmZpbmRCeU5hbWUoYi5uYW1lKS5hZGRDbGFzcyhjKS5yZW1vdmVDbGFzcyhkKTphKGIpLmFkZENsYXNzKGMpLnJlbW92ZUNsYXNzKGQpfSx1bmhpZ2hsaWdodDpmdW5jdGlvbihiLGMsZCl7XCJyYWRpb1wiPT09Yi50eXBlP3RoaXMuZmluZEJ5TmFtZShiLm5hbWUpLnJlbW92ZUNsYXNzKGMpLmFkZENsYXNzKGQpOmEoYikucmVtb3ZlQ2xhc3MoYykuYWRkQ2xhc3MoZCl9fSxzZXREZWZhdWx0czpmdW5jdGlvbihiKXthLmV4dGVuZChhLnZhbGlkYXRvci5kZWZhdWx0cyxiKX0sbWVzc2FnZXM6e3JlcXVpcmVkOlwiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC5cIixyZW1vdGU6XCJQbGVhc2UgZml4IHRoaXMgZmllbGQuXCIsZW1haWw6XCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiLHVybDpcIlBsZWFzZSBlbnRlciBhIHZhbGlkIFVSTC5cIixkYXRlOlwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZS5cIixkYXRlSVNPOlwiUGxlYXNlIGVudGVyIGEgdmFsaWQgZGF0ZSAoSVNPKS5cIixudW1iZXI6XCJQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIuXCIsZGlnaXRzOlwiUGxlYXNlIGVudGVyIG9ubHkgZGlnaXRzLlwiLGVxdWFsVG86XCJQbGVhc2UgZW50ZXIgdGhlIHNhbWUgdmFsdWUgYWdhaW4uXCIsbWF4bGVuZ3RoOmEudmFsaWRhdG9yLmZvcm1hdChcIlBsZWFzZSBlbnRlciBubyBtb3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuXCIpLG1pbmxlbmd0aDphLnZhbGlkYXRvci5mb3JtYXQoXCJQbGVhc2UgZW50ZXIgYXQgbGVhc3QgezB9IGNoYXJhY3RlcnMuXCIpLHJhbmdlbGVuZ3RoOmEudmFsaWRhdG9yLmZvcm1hdChcIlBsZWFzZSBlbnRlciBhIHZhbHVlIGJldHdlZW4gezB9IGFuZCB7MX0gY2hhcmFjdGVycyBsb25nLlwiKSxyYW5nZTphLnZhbGlkYXRvci5mb3JtYXQoXCJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBiZXR3ZWVuIHswfSBhbmQgezF9LlwiKSxtYXg6YS52YWxpZGF0b3IuZm9ybWF0KFwiUGxlYXNlIGVudGVyIGEgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHswfS5cIiksbWluOmEudmFsaWRhdG9yLmZvcm1hdChcIlBsZWFzZSBlbnRlciBhIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB7MH0uXCIpLHN0ZXA6YS52YWxpZGF0b3IuZm9ybWF0KFwiUGxlYXNlIGVudGVyIGEgbXVsdGlwbGUgb2YgezB9LlwiKX0sYXV0b0NyZWF0ZVJhbmdlczohMSxwcm90b3R5cGU6e2luaXQ6ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGIpeyF0aGlzLmZvcm0mJnRoaXMuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpJiYodGhpcy5mb3JtPWEodGhpcykuY2xvc2VzdChcImZvcm1cIilbMF0pO3ZhciBjPWEuZGF0YSh0aGlzLmZvcm0sXCJ2YWxpZGF0b3JcIiksZD1cIm9uXCIrYi50eXBlLnJlcGxhY2UoL152YWxpZGF0ZS8sXCJcIiksZT1jLnNldHRpbmdzO2VbZF0mJiFhKHRoaXMpLmlzKGUuaWdub3JlKSYmZVtkXS5jYWxsKGMsdGhpcyxiKX10aGlzLmxhYmVsQ29udGFpbmVyPWEodGhpcy5zZXR0aW5ncy5lcnJvckxhYmVsQ29udGFpbmVyKSx0aGlzLmVycm9yQ29udGV4dD10aGlzLmxhYmVsQ29udGFpbmVyLmxlbmd0aCYmdGhpcy5sYWJlbENvbnRhaW5lcnx8YSh0aGlzLmN1cnJlbnRGb3JtKSx0aGlzLmNvbnRhaW5lcnM9YSh0aGlzLnNldHRpbmdzLmVycm9yQ29udGFpbmVyKS5hZGQodGhpcy5zZXR0aW5ncy5lcnJvckxhYmVsQ29udGFpbmVyKSx0aGlzLnN1Ym1pdHRlZD17fSx0aGlzLnZhbHVlQ2FjaGU9e30sdGhpcy5wZW5kaW5nUmVxdWVzdD0wLHRoaXMucGVuZGluZz17fSx0aGlzLmludmFsaWQ9e30sdGhpcy5yZXNldCgpO3ZhciBjLGQ9dGhpcy5ncm91cHM9e307YS5lYWNoKHRoaXMuc2V0dGluZ3MuZ3JvdXBzLGZ1bmN0aW9uKGIsYyl7XCJzdHJpbmdcIj09dHlwZW9mIGMmJihjPWMuc3BsaXQoL1xccy8pKSxhLmVhY2goYyxmdW5jdGlvbihhLGMpe2RbY109Yn0pfSksYz10aGlzLnNldHRpbmdzLnJ1bGVzLGEuZWFjaChjLGZ1bmN0aW9uKGIsZCl7Y1tiXT1hLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGQpfSksYSh0aGlzLmN1cnJlbnRGb3JtKS5vbihcImZvY3VzaW4udmFsaWRhdGUgZm9jdXNvdXQudmFsaWRhdGUga2V5dXAudmFsaWRhdGVcIixcIjp0ZXh0LCBbdHlwZT0ncGFzc3dvcmQnXSwgW3R5cGU9J2ZpbGUnXSwgc2VsZWN0LCB0ZXh0YXJlYSwgW3R5cGU9J251bWJlciddLCBbdHlwZT0nc2VhcmNoJ10sIFt0eXBlPSd0ZWwnXSwgW3R5cGU9J3VybCddLCBbdHlwZT0nZW1haWwnXSwgW3R5cGU9J2RhdGV0aW1lJ10sIFt0eXBlPSdkYXRlJ10sIFt0eXBlPSdtb250aCddLCBbdHlwZT0nd2VlayddLCBbdHlwZT0ndGltZSddLCBbdHlwZT0nZGF0ZXRpbWUtbG9jYWwnXSwgW3R5cGU9J3JhbmdlJ10sIFt0eXBlPSdjb2xvciddLCBbdHlwZT0ncmFkaW8nXSwgW3R5cGU9J2NoZWNrYm94J10sIFtjb250ZW50ZWRpdGFibGVdLCBbdHlwZT0nYnV0dG9uJ11cIixiKS5vbihcImNsaWNrLnZhbGlkYXRlXCIsXCJzZWxlY3QsIG9wdGlvbiwgW3R5cGU9J3JhZGlvJ10sIFt0eXBlPSdjaGVja2JveCddXCIsYiksdGhpcy5zZXR0aW5ncy5pbnZhbGlkSGFuZGxlciYmYSh0aGlzLmN1cnJlbnRGb3JtKS5vbihcImludmFsaWQtZm9ybS52YWxpZGF0ZVwiLHRoaXMuc2V0dGluZ3MuaW52YWxpZEhhbmRsZXIpLGEodGhpcy5jdXJyZW50Rm9ybSkuZmluZChcIltyZXF1aXJlZF0sIFtkYXRhLXJ1bGUtcmVxdWlyZWRdLCAucmVxdWlyZWRcIikuYXR0cihcImFyaWEtcmVxdWlyZWRcIixcInRydWVcIil9LGZvcm06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGVja0Zvcm0oKSxhLmV4dGVuZCh0aGlzLnN1Ym1pdHRlZCx0aGlzLmVycm9yTWFwKSx0aGlzLmludmFsaWQ9YS5leHRlbmQoe30sdGhpcy5lcnJvck1hcCksdGhpcy52YWxpZCgpfHxhKHRoaXMuY3VycmVudEZvcm0pLnRyaWdnZXJIYW5kbGVyKFwiaW52YWxpZC1mb3JtXCIsW3RoaXNdKSx0aGlzLnNob3dFcnJvcnMoKSx0aGlzLnZhbGlkKCl9LGNoZWNrRm9ybTpmdW5jdGlvbigpe3RoaXMucHJlcGFyZUZvcm0oKTtmb3IodmFyIGE9MCxiPXRoaXMuY3VycmVudEVsZW1lbnRzPXRoaXMuZWxlbWVudHMoKTtiW2FdO2ErKyl0aGlzLmNoZWNrKGJbYV0pO3JldHVybiB0aGlzLnZhbGlkKCl9LGVsZW1lbnQ6ZnVuY3Rpb24oYil7dmFyIGMsZCxlPXRoaXMuY2xlYW4oYiksZj10aGlzLnZhbGlkYXRpb25UYXJnZXRGb3IoZSksZz10aGlzLGg9ITA7cmV0dXJuIHZvaWQgMD09PWY/ZGVsZXRlIHRoaXMuaW52YWxpZFtlLm5hbWVdOih0aGlzLnByZXBhcmVFbGVtZW50KGYpLHRoaXMuY3VycmVudEVsZW1lbnRzPWEoZiksZD10aGlzLmdyb3Vwc1tmLm5hbWVdLGQmJmEuZWFjaCh0aGlzLmdyb3VwcyxmdW5jdGlvbihhLGIpe2I9PT1kJiZhIT09Zi5uYW1lJiYoZT1nLnZhbGlkYXRpb25UYXJnZXRGb3IoZy5jbGVhbihnLmZpbmRCeU5hbWUoYSkpKSxlJiZlLm5hbWUgaW4gZy5pbnZhbGlkJiYoZy5jdXJyZW50RWxlbWVudHMucHVzaChlKSxoPWcuY2hlY2soZSkmJmgpKX0pLGM9dGhpcy5jaGVjayhmKSE9PSExLGg9aCYmYyxjP3RoaXMuaW52YWxpZFtmLm5hbWVdPSExOnRoaXMuaW52YWxpZFtmLm5hbWVdPSEwLHRoaXMubnVtYmVyT2ZJbnZhbGlkcygpfHwodGhpcy50b0hpZGU9dGhpcy50b0hpZGUuYWRkKHRoaXMuY29udGFpbmVycykpLHRoaXMuc2hvd0Vycm9ycygpLGEoYikuYXR0cihcImFyaWEtaW52YWxpZFwiLCFjKSksaH0sc2hvd0Vycm9yczpmdW5jdGlvbihiKXtpZihiKXt2YXIgYz10aGlzO2EuZXh0ZW5kKHRoaXMuZXJyb3JNYXAsYiksdGhpcy5lcnJvckxpc3Q9YS5tYXAodGhpcy5lcnJvck1hcCxmdW5jdGlvbihhLGIpe3JldHVybnttZXNzYWdlOmEsZWxlbWVudDpjLmZpbmRCeU5hbWUoYilbMF19fSksdGhpcy5zdWNjZXNzTGlzdD1hLmdyZXAodGhpcy5zdWNjZXNzTGlzdCxmdW5jdGlvbihhKXtyZXR1cm4hKGEubmFtZSBpbiBiKX0pfXRoaXMuc2V0dGluZ3Muc2hvd0Vycm9ycz90aGlzLnNldHRpbmdzLnNob3dFcnJvcnMuY2FsbCh0aGlzLHRoaXMuZXJyb3JNYXAsdGhpcy5lcnJvckxpc3QpOnRoaXMuZGVmYXVsdFNob3dFcnJvcnMoKX0scmVzZXRGb3JtOmZ1bmN0aW9uKCl7YS5mbi5yZXNldEZvcm0mJmEodGhpcy5jdXJyZW50Rm9ybSkucmVzZXRGb3JtKCksdGhpcy5pbnZhbGlkPXt9LHRoaXMuc3VibWl0dGVkPXt9LHRoaXMucHJlcGFyZUZvcm0oKSx0aGlzLmhpZGVFcnJvcnMoKTt2YXIgYj10aGlzLmVsZW1lbnRzKCkucmVtb3ZlRGF0YShcInByZXZpb3VzVmFsdWVcIikucmVtb3ZlQXR0cihcImFyaWEtaW52YWxpZFwiKTt0aGlzLnJlc2V0RWxlbWVudHMoYil9LHJlc2V0RWxlbWVudHM6ZnVuY3Rpb24oYSl7dmFyIGI7aWYodGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodClmb3IoYj0wO2FbYl07YisrKXRoaXMuc2V0dGluZ3MudW5oaWdobGlnaHQuY2FsbCh0aGlzLGFbYl0sdGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzLFwiXCIpLHRoaXMuZmluZEJ5TmFtZShhW2JdLm5hbWUpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcyk7ZWxzZSBhLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MuZXJyb3JDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKX0sbnVtYmVyT2ZJbnZhbGlkczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdExlbmd0aCh0aGlzLmludmFsaWQpfSxvYmplY3RMZW5ndGg6ZnVuY3Rpb24oYSl7dmFyIGIsYz0wO2ZvcihiIGluIGEpYVtiXSYmYysrO3JldHVybiBjfSxoaWRlRXJyb3JzOmZ1bmN0aW9uKCl7dGhpcy5oaWRlVGhlc2UodGhpcy50b0hpZGUpfSxoaWRlVGhlc2U6ZnVuY3Rpb24oYSl7YS5ub3QodGhpcy5jb250YWluZXJzKS50ZXh0KFwiXCIpLHRoaXMuYWRkV3JhcHBlcihhKS5oaWRlKCl9LHZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnNpemUoKX0sc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVycm9yTGlzdC5sZW5ndGh9LGZvY3VzSW52YWxpZDpmdW5jdGlvbigpe2lmKHRoaXMuc2V0dGluZ3MuZm9jdXNJbnZhbGlkKXRyeXthKHRoaXMuZmluZExhc3RBY3RpdmUoKXx8dGhpcy5lcnJvckxpc3QubGVuZ3RoJiZ0aGlzLmVycm9yTGlzdFswXS5lbGVtZW50fHxbXSkuZmlsdGVyKFwiOnZpc2libGVcIikuZm9jdXMoKS50cmlnZ2VyKFwiZm9jdXNpblwiKX1jYXRjaChiKXt9fSxmaW5kTGFzdEFjdGl2ZTpmdW5jdGlvbigpe3ZhciBiPXRoaXMubGFzdEFjdGl2ZTtyZXR1cm4gYiYmMT09PWEuZ3JlcCh0aGlzLmVycm9yTGlzdCxmdW5jdGlvbihhKXtyZXR1cm4gYS5lbGVtZW50Lm5hbWU9PT1iLm5hbWV9KS5sZW5ndGgmJmJ9LGVsZW1lbnRzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPXt9O3JldHVybiBhKHRoaXMuY3VycmVudEZvcm0pLmZpbmQoXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW2NvbnRlbnRlZGl0YWJsZV1cIikubm90KFwiOnN1Ym1pdCwgOnJlc2V0LCA6aW1hZ2UsIDpkaXNhYmxlZFwiKS5ub3QodGhpcy5zZXR0aW5ncy5pZ25vcmUpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBkPXRoaXMubmFtZXx8YSh0aGlzKS5hdHRyKFwibmFtZVwiKTtyZXR1cm4hZCYmYi5zZXR0aW5ncy5kZWJ1ZyYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUuZXJyb3IoXCIlbyBoYXMgbm8gbmFtZSBhc3NpZ25lZFwiLHRoaXMpLHRoaXMuaGFzQXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIpJiYodGhpcy5mb3JtPWEodGhpcykuY2xvc2VzdChcImZvcm1cIilbMF0pLCEoZCBpbiBjfHwhYi5vYmplY3RMZW5ndGgoYSh0aGlzKS5ydWxlcygpKSkmJihjW2RdPSEwLCEwKX0pfSxjbGVhbjpmdW5jdGlvbihiKXtyZXR1cm4gYShiKVswXX0sZXJyb3JzOmZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzLnNwbGl0KFwiIFwiKS5qb2luKFwiLlwiKTtyZXR1cm4gYSh0aGlzLnNldHRpbmdzLmVycm9yRWxlbWVudCtcIi5cIitiLHRoaXMuZXJyb3JDb250ZXh0KX0scmVzZXRJbnRlcm5hbHM6ZnVuY3Rpb24oKXt0aGlzLnN1Y2Nlc3NMaXN0PVtdLHRoaXMuZXJyb3JMaXN0PVtdLHRoaXMuZXJyb3JNYXA9e30sdGhpcy50b1Nob3c9YShbXSksdGhpcy50b0hpZGU9YShbXSl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5yZXNldEludGVybmFscygpLHRoaXMuY3VycmVudEVsZW1lbnRzPWEoW10pfSxwcmVwYXJlRm9ybTpmdW5jdGlvbigpe3RoaXMucmVzZXQoKSx0aGlzLnRvSGlkZT10aGlzLmVycm9ycygpLmFkZCh0aGlzLmNvbnRhaW5lcnMpfSxwcmVwYXJlRWxlbWVudDpmdW5jdGlvbihhKXt0aGlzLnJlc2V0KCksdGhpcy50b0hpZGU9dGhpcy5lcnJvcnNGb3IoYSl9LGVsZW1lbnRWYWx1ZTpmdW5jdGlvbihiKXt2YXIgYyxkLGU9YShiKSxmPWIudHlwZTtyZXR1cm5cInJhZGlvXCI9PT1mfHxcImNoZWNrYm94XCI9PT1mP3RoaXMuZmluZEJ5TmFtZShiLm5hbWUpLmZpbHRlcihcIjpjaGVja2VkXCIpLnZhbCgpOlwibnVtYmVyXCI9PT1mJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgYi52YWxpZGl0eT9iLnZhbGlkaXR5LmJhZElucHV0P1wiTmFOXCI6ZS52YWwoKTooYz1iLmhhc0F0dHJpYnV0ZShcImNvbnRlbnRlZGl0YWJsZVwiKT9lLnRleHQoKTplLnZhbCgpLFwiZmlsZVwiPT09Zj9cIkM6XFxcXGZha2VwYXRoXFxcXFwiPT09Yy5zdWJzdHIoMCwxMik/Yy5zdWJzdHIoMTIpOihkPWMubGFzdEluZGV4T2YoXCIvXCIpLGQ+PTA/Yy5zdWJzdHIoZCsxKTooZD1jLmxhc3RJbmRleE9mKFwiXFxcXFwiKSxkPj0wP2Muc3Vic3RyKGQrMSk6YykpOlwic3RyaW5nXCI9PXR5cGVvZiBjP2MucmVwbGFjZSgvXFxyL2csXCJcIik6Yyl9LGNoZWNrOmZ1bmN0aW9uKGIpe2I9dGhpcy52YWxpZGF0aW9uVGFyZ2V0Rm9yKHRoaXMuY2xlYW4oYikpO3ZhciBjLGQsZSxmPWEoYikucnVsZXMoKSxnPWEubWFwKGYsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYn0pLmxlbmd0aCxoPSExLGk9dGhpcy5lbGVtZW50VmFsdWUoYik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZi5ub3JtYWxpemVyKXtpZihpPWYubm9ybWFsaXplci5jYWxsKGIsaSksXCJzdHJpbmdcIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBub3JtYWxpemVyIHNob3VsZCByZXR1cm4gYSBzdHJpbmcgdmFsdWUuXCIpO2RlbGV0ZSBmLm5vcm1hbGl6ZXJ9Zm9yKGQgaW4gZil7ZT17bWV0aG9kOmQscGFyYW1ldGVyczpmW2RdfTt0cnl7aWYoYz1hLnZhbGlkYXRvci5tZXRob2RzW2RdLmNhbGwodGhpcyxpLGIsZS5wYXJhbWV0ZXJzKSxcImRlcGVuZGVuY3ktbWlzbWF0Y2hcIj09PWMmJjE9PT1nKXtoPSEwO2NvbnRpbnVlfWlmKGg9ITEsXCJwZW5kaW5nXCI9PT1jKXJldHVybiB2b2lkKHRoaXMudG9IaWRlPXRoaXMudG9IaWRlLm5vdCh0aGlzLmVycm9yc0ZvcihiKSkpO2lmKCFjKXJldHVybiB0aGlzLmZvcm1hdEFuZEFkZChiLGUpLCExfWNhdGNoKGope3Rocm93IHRoaXMuc2V0dGluZ3MuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmxvZyhcIkV4Y2VwdGlvbiBvY2N1cnJlZCB3aGVuIGNoZWNraW5nIGVsZW1lbnQgXCIrYi5pZCtcIiwgY2hlY2sgdGhlICdcIitlLm1ldGhvZCtcIicgbWV0aG9kLlwiLGopLGogaW5zdGFuY2VvZiBUeXBlRXJyb3ImJihqLm1lc3NhZ2UrPVwiLiAgRXhjZXB0aW9uIG9jY3VycmVkIHdoZW4gY2hlY2tpbmcgZWxlbWVudCBcIitiLmlkK1wiLCBjaGVjayB0aGUgJ1wiK2UubWV0aG9kK1wiJyBtZXRob2QuXCIpLGp9fWlmKCFoKXJldHVybiB0aGlzLm9iamVjdExlbmd0aChmKSYmdGhpcy5zdWNjZXNzTGlzdC5wdXNoKGIpLCEwfSxjdXN0b21EYXRhTWVzc2FnZTpmdW5jdGlvbihiLGMpe3JldHVybiBhKGIpLmRhdGEoXCJtc2dcIitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpfHxhKGIpLmRhdGEoXCJtc2dcIil9LGN1c3RvbU1lc3NhZ2U6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2FdO3JldHVybiBjJiYoYy5jb25zdHJ1Y3Rvcj09PVN0cmluZz9jOmNbYl0pfSxmaW5kRGVmaW5lZDpmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2E8YXJndW1lbnRzLmxlbmd0aDthKyspaWYodm9pZCAwIT09YXJndW1lbnRzW2FdKXJldHVybiBhcmd1bWVudHNbYV19LGRlZmF1bHRNZXNzYWdlOmZ1bmN0aW9uKGIsYyl7XCJzdHJpbmdcIj09dHlwZW9mIGMmJihjPXttZXRob2Q6Y30pO3ZhciBkPXRoaXMuZmluZERlZmluZWQodGhpcy5jdXN0b21NZXNzYWdlKGIubmFtZSxjLm1ldGhvZCksdGhpcy5jdXN0b21EYXRhTWVzc2FnZShiLGMubWV0aG9kKSwhdGhpcy5zZXR0aW5ncy5pZ25vcmVUaXRsZSYmYi50aXRsZXx8dm9pZCAwLGEudmFsaWRhdG9yLm1lc3NhZ2VzW2MubWV0aG9kXSxcIjxzdHJvbmc+V2FybmluZzogTm8gbWVzc2FnZSBkZWZpbmVkIGZvciBcIitiLm5hbWUrXCI8L3N0cm9uZz5cIiksZT0vXFwkP1xceyhcXGQrKVxcfS9nO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGQ/ZD1kLmNhbGwodGhpcyxjLnBhcmFtZXRlcnMsYik6ZS50ZXN0KGQpJiYoZD1hLnZhbGlkYXRvci5mb3JtYXQoZC5yZXBsYWNlKGUsXCJ7JDF9XCIpLGMucGFyYW1ldGVycykpLGR9LGZvcm1hdEFuZEFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZGVmYXVsdE1lc3NhZ2UoYSxiKTt0aGlzLmVycm9yTGlzdC5wdXNoKHttZXNzYWdlOmMsZWxlbWVudDphLG1ldGhvZDpiLm1ldGhvZH0pLHRoaXMuZXJyb3JNYXBbYS5uYW1lXT1jLHRoaXMuc3VibWl0dGVkW2EubmFtZV09Y30sYWRkV3JhcHBlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy53cmFwcGVyJiYoYT1hLmFkZChhLnBhcmVudCh0aGlzLnNldHRpbmdzLndyYXBwZXIpKSksYX0sZGVmYXVsdFNob3dFcnJvcnM6ZnVuY3Rpb24oKXt2YXIgYSxiLGM7Zm9yKGE9MDt0aGlzLmVycm9yTGlzdFthXTthKyspYz10aGlzLmVycm9yTGlzdFthXSx0aGlzLnNldHRpbmdzLmhpZ2hsaWdodCYmdGhpcy5zZXR0aW5ncy5oaWdobGlnaHQuY2FsbCh0aGlzLGMuZWxlbWVudCx0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKSx0aGlzLnNob3dMYWJlbChjLmVsZW1lbnQsYy5tZXNzYWdlKTtpZih0aGlzLmVycm9yTGlzdC5sZW5ndGgmJih0aGlzLnRvU2hvdz10aGlzLnRvU2hvdy5hZGQodGhpcy5jb250YWluZXJzKSksdGhpcy5zZXR0aW5ncy5zdWNjZXNzKWZvcihhPTA7dGhpcy5zdWNjZXNzTGlzdFthXTthKyspdGhpcy5zaG93TGFiZWwodGhpcy5zdWNjZXNzTGlzdFthXSk7aWYodGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodClmb3IoYT0wLGI9dGhpcy52YWxpZEVsZW1lbnRzKCk7YlthXTthKyspdGhpcy5zZXR0aW5ncy51bmhpZ2hsaWdodC5jYWxsKHRoaXMsYlthXSx0aGlzLnNldHRpbmdzLmVycm9yQ2xhc3MsdGhpcy5zZXR0aW5ncy52YWxpZENsYXNzKTt0aGlzLnRvSGlkZT10aGlzLnRvSGlkZS5ub3QodGhpcy50b1Nob3cpLHRoaXMuaGlkZUVycm9ycygpLHRoaXMuYWRkV3JhcHBlcih0aGlzLnRvU2hvdykuc2hvdygpfSx2YWxpZEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEVsZW1lbnRzLm5vdCh0aGlzLmludmFsaWRFbGVtZW50cygpKX0saW52YWxpZEVsZW1lbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5lcnJvckxpc3QpLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9KX0sc2hvd0xhYmVsOmZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGcsaD10aGlzLmVycm9yc0ZvcihiKSxpPXRoaXMuaWRPck5hbWUoYiksaj1hKGIpLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpO2gubGVuZ3RoPyhoLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MudmFsaWRDbGFzcykuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzKSxoLmh0bWwoYykpOihoPWEoXCI8XCIrdGhpcy5zZXR0aW5ncy5lcnJvckVsZW1lbnQrXCI+XCIpLmF0dHIoXCJpZFwiLGkrXCItZXJyb3JcIikuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5lcnJvckNsYXNzKS5odG1sKGN8fFwiXCIpLGQ9aCx0aGlzLnNldHRpbmdzLndyYXBwZXImJihkPWguaGlkZSgpLnNob3coKS53cmFwKFwiPFwiK3RoaXMuc2V0dGluZ3Mud3JhcHBlcitcIi8+XCIpLnBhcmVudCgpKSx0aGlzLmxhYmVsQ29udGFpbmVyLmxlbmd0aD90aGlzLmxhYmVsQ29udGFpbmVyLmFwcGVuZChkKTp0aGlzLnNldHRpbmdzLmVycm9yUGxhY2VtZW50P3RoaXMuc2V0dGluZ3MuZXJyb3JQbGFjZW1lbnQuY2FsbCh0aGlzLGQsYShiKSk6ZC5pbnNlcnRBZnRlcihiKSxoLmlzKFwibGFiZWxcIik/aC5hdHRyKFwiZm9yXCIsaSk6MD09PWgucGFyZW50cyhcImxhYmVsW2Zvcj0nXCIrdGhpcy5lc2NhcGVDc3NNZXRhKGkpK1wiJ11cIikubGVuZ3RoJiYoZj1oLmF0dHIoXCJpZFwiKSxqP2oubWF0Y2gobmV3IFJlZ0V4cChcIlxcXFxiXCIrdGhpcy5lc2NhcGVDc3NNZXRhKGYpK1wiXFxcXGJcIikpfHwoais9XCIgXCIrZik6aj1mLGEoYikuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixqKSxlPXRoaXMuZ3JvdXBzW2IubmFtZV0sZSYmKGc9dGhpcyxhLmVhY2goZy5ncm91cHMsZnVuY3Rpb24oYixjKXtjPT09ZSYmYShcIltuYW1lPSdcIitnLmVzY2FwZUNzc01ldGEoYikrXCInXVwiLGcuY3VycmVudEZvcm0pLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsaC5hdHRyKFwiaWRcIikpfSkpKSksIWMmJnRoaXMuc2V0dGluZ3Muc3VjY2VzcyYmKGgudGV4dChcIlwiKSxcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5zdWNjZXNzP2guYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5zdWNjZXNzKTp0aGlzLnNldHRpbmdzLnN1Y2Nlc3MoaCxiKSksdGhpcy50b1Nob3c9dGhpcy50b1Nob3cuYWRkKGgpfSxlcnJvcnNGb3I6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lc2NhcGVDc3NNZXRhKHRoaXMuaWRPck5hbWUoYikpLGQ9YShiKS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKSxlPVwibGFiZWxbZm9yPSdcIitjK1wiJ10sIGxhYmVsW2Zvcj0nXCIrYytcIiddICpcIjtyZXR1cm4gZCYmKGU9ZStcIiwgI1wiK3RoaXMuZXNjYXBlQ3NzTWV0YShkKS5yZXBsYWNlKC9cXHMrL2csXCIsICNcIikpLHRoaXMuZXJyb3JzKCkuZmlsdGVyKGUpfSxlc2NhcGVDc3NNZXRhOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoLyhbXFxcXCFcIiMkJSYnKCkqKywuLzo7PD0+P0BcXFtcXF1eYHt8fX5dKS9nLFwiXFxcXCQxXCIpfSxpZE9yTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ncm91cHNbYS5uYW1lXXx8KHRoaXMuY2hlY2thYmxlKGEpP2EubmFtZTphLmlkfHxhLm5hbWUpfSx2YWxpZGF0aW9uVGFyZ2V0Rm9yOmZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNoZWNrYWJsZShiKSYmKGI9dGhpcy5maW5kQnlOYW1lKGIubmFtZSkpLGEoYikubm90KHRoaXMuc2V0dGluZ3MuaWdub3JlKVswXX0sY2hlY2thYmxlOmZ1bmN0aW9uKGEpe3JldHVybi9yYWRpb3xjaGVja2JveC9pLnRlc3QoYS50eXBlKX0sZmluZEJ5TmFtZTpmdW5jdGlvbihiKXtyZXR1cm4gYSh0aGlzLmN1cnJlbnRGb3JtKS5maW5kKFwiW25hbWU9J1wiK3RoaXMuZXNjYXBlQ3NzTWV0YShiKStcIiddXCIpfSxnZXRMZW5ndGg6ZnVuY3Rpb24oYixjKXtzd2l0Y2goYy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJzZWxlY3RcIjpyZXR1cm4gYShcIm9wdGlvbjpzZWxlY3RlZFwiLGMpLmxlbmd0aDtjYXNlXCJpbnB1dFwiOmlmKHRoaXMuY2hlY2thYmxlKGMpKXJldHVybiB0aGlzLmZpbmRCeU5hbWUoYy5uYW1lKS5maWx0ZXIoXCI6Y2hlY2tlZFwiKS5sZW5ndGh9cmV0dXJuIGIubGVuZ3RofSxkZXBlbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4hdGhpcy5kZXBlbmRUeXBlc1t0eXBlb2YgYV18fHRoaXMuZGVwZW5kVHlwZXNbdHlwZW9mIGFdKGEsYil9LGRlcGVuZFR5cGVzOntcImJvb2xlYW5cIjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3RyaW5nOmZ1bmN0aW9uKGIsYyl7cmV0dXJuISFhKGIsYy5mb3JtKS5sZW5ndGh9LFwiZnVuY3Rpb25cIjpmdW5jdGlvbihhLGIpe3JldHVybiBhKGIpfX0sb3B0aW9uYWw6ZnVuY3Rpb24oYil7dmFyIGM9dGhpcy5lbGVtZW50VmFsdWUoYik7cmV0dXJuIWEudmFsaWRhdG9yLm1ldGhvZHMucmVxdWlyZWQuY2FsbCh0aGlzLGMsYikmJlwiZGVwZW5kZW5jeS1taXNtYXRjaFwifSxzdGFydFJlcXVlc3Q6ZnVuY3Rpb24oYil7dGhpcy5wZW5kaW5nW2IubmFtZV18fCh0aGlzLnBlbmRpbmdSZXF1ZXN0KyssYShiKS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLnBlbmRpbmdDbGFzcyksdGhpcy5wZW5kaW5nW2IubmFtZV09ITApfSxzdG9wUmVxdWVzdDpmdW5jdGlvbihiLGMpe3RoaXMucGVuZGluZ1JlcXVlc3QtLSx0aGlzLnBlbmRpbmdSZXF1ZXN0PDAmJih0aGlzLnBlbmRpbmdSZXF1ZXN0PTApLGRlbGV0ZSB0aGlzLnBlbmRpbmdbYi5uYW1lXSxhKGIpLnJlbW92ZUNsYXNzKHRoaXMuc2V0dGluZ3MucGVuZGluZ0NsYXNzKSxjJiYwPT09dGhpcy5wZW5kaW5nUmVxdWVzdCYmdGhpcy5mb3JtU3VibWl0dGVkJiZ0aGlzLmZvcm0oKT8oYSh0aGlzLmN1cnJlbnRGb3JtKS5zdWJtaXQoKSx0aGlzLmZvcm1TdWJtaXR0ZWQ9ITEpOiFjJiYwPT09dGhpcy5wZW5kaW5nUmVxdWVzdCYmdGhpcy5mb3JtU3VibWl0dGVkJiYoYSh0aGlzLmN1cnJlbnRGb3JtKS50cmlnZ2VySGFuZGxlcihcImludmFsaWQtZm9ybVwiLFt0aGlzXSksdGhpcy5mb3JtU3VibWl0dGVkPSExKX0scHJldmlvdXNWYWx1ZTpmdW5jdGlvbihiLGMpe3JldHVybiBjPVwic3RyaW5nXCI9PXR5cGVvZiBjJiZjfHxcInJlbW90ZVwiLGEuZGF0YShiLFwicHJldmlvdXNWYWx1ZVwiKXx8YS5kYXRhKGIsXCJwcmV2aW91c1ZhbHVlXCIse29sZDpudWxsLHZhbGlkOiEwLG1lc3NhZ2U6dGhpcy5kZWZhdWx0TWVzc2FnZShiLHttZXRob2Q6Y30pfSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnJlc2V0Rm9ybSgpLGEodGhpcy5jdXJyZW50Rm9ybSkub2ZmKFwiLnZhbGlkYXRlXCIpLnJlbW92ZURhdGEoXCJ2YWxpZGF0b3JcIikuZmluZChcIi52YWxpZGF0ZS1lcXVhbFRvLWJsdXJcIikub2ZmKFwiLnZhbGlkYXRlLWVxdWFsVG9cIikucmVtb3ZlQ2xhc3MoXCJ2YWxpZGF0ZS1lcXVhbFRvLWJsdXJcIil9fSxjbGFzc1J1bGVTZXR0aW5nczp7cmVxdWlyZWQ6e3JlcXVpcmVkOiEwfSxlbWFpbDp7ZW1haWw6ITB9LHVybDp7dXJsOiEwfSxkYXRlOntkYXRlOiEwfSxkYXRlSVNPOntkYXRlSVNPOiEwfSxudW1iZXI6e251bWJlcjohMH0sZGlnaXRzOntkaWdpdHM6ITB9LGNyZWRpdGNhcmQ6e2NyZWRpdGNhcmQ6ITB9fSxhZGRDbGFzc1J1bGVzOmZ1bmN0aW9uKGIsYyl7Yi5jb25zdHJ1Y3Rvcj09PVN0cmluZz90aGlzLmNsYXNzUnVsZVNldHRpbmdzW2JdPWM6YS5leHRlbmQodGhpcy5jbGFzc1J1bGVTZXR0aW5ncyxiKX0sY2xhc3NSdWxlczpmdW5jdGlvbihiKXt2YXIgYz17fSxkPWEoYikuYXR0cihcImNsYXNzXCIpO3JldHVybiBkJiZhLmVhY2goZC5zcGxpdChcIiBcIiksZnVuY3Rpb24oKXt0aGlzIGluIGEudmFsaWRhdG9yLmNsYXNzUnVsZVNldHRpbmdzJiZhLmV4dGVuZChjLGEudmFsaWRhdG9yLmNsYXNzUnVsZVNldHRpbmdzW3RoaXNdKX0pLGN9LG5vcm1hbGl6ZUF0dHJpYnV0ZVJ1bGU6ZnVuY3Rpb24oYSxiLGMsZCl7L21pbnxtYXh8c3RlcC8udGVzdChjKSYmKG51bGw9PT1ifHwvbnVtYmVyfHJhbmdlfHRleHQvLnRlc3QoYikpJiYoZD1OdW1iZXIoZCksaXNOYU4oZCkmJihkPXZvaWQgMCkpLGR8fDA9PT1kP2FbY109ZDpiPT09YyYmXCJyYW5nZVwiIT09YiYmKGFbY109ITApfSxhdHRyaWJ1dGVSdWxlczpmdW5jdGlvbihiKXt2YXIgYyxkLGU9e30sZj1hKGIpLGc9Yi5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpO2ZvcihjIGluIGEudmFsaWRhdG9yLm1ldGhvZHMpXCJyZXF1aXJlZFwiPT09Yz8oZD1iLmdldEF0dHJpYnV0ZShjKSxcIlwiPT09ZCYmKGQ9ITApLGQ9ISFkKTpkPWYuYXR0cihjKSx0aGlzLm5vcm1hbGl6ZUF0dHJpYnV0ZVJ1bGUoZSxnLGMsZCk7cmV0dXJuIGUubWF4bGVuZ3RoJiYvLTF8MjE0NzQ4MzY0N3w1MjQyODgvLnRlc3QoZS5tYXhsZW5ndGgpJiZkZWxldGUgZS5tYXhsZW5ndGgsZX0sZGF0YVJ1bGVzOmZ1bmN0aW9uKGIpe3ZhciBjLGQsZT17fSxmPWEoYiksZz1iLmdldEF0dHJpYnV0ZShcInR5cGVcIik7Zm9yKGMgaW4gYS52YWxpZGF0b3IubWV0aG9kcylkPWYuZGF0YShcInJ1bGVcIitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkpLHRoaXMubm9ybWFsaXplQXR0cmlidXRlUnVsZShlLGcsYyxkKTtyZXR1cm4gZX0sc3RhdGljUnVsZXM6ZnVuY3Rpb24oYil7dmFyIGM9e30sZD1hLmRhdGEoYi5mb3JtLFwidmFsaWRhdG9yXCIpO3JldHVybiBkLnNldHRpbmdzLnJ1bGVzJiYoYz1hLnZhbGlkYXRvci5ub3JtYWxpemVSdWxlKGQuc2V0dGluZ3MucnVsZXNbYi5uYW1lXSl8fHt9KSxjfSxub3JtYWxpemVSdWxlczpmdW5jdGlvbihiLGMpe3JldHVybiBhLmVhY2goYixmdW5jdGlvbihkLGUpe2lmKGU9PT0hMSlyZXR1cm4gdm9pZCBkZWxldGUgYltkXTtpZihlLnBhcmFtfHxlLmRlcGVuZHMpe3ZhciBmPSEwO3N3aXRjaCh0eXBlb2YgZS5kZXBlbmRzKXtjYXNlXCJzdHJpbmdcIjpmPSEhYShlLmRlcGVuZHMsYy5mb3JtKS5sZW5ndGg7YnJlYWs7Y2FzZVwiZnVuY3Rpb25cIjpmPWUuZGVwZW5kcy5jYWxsKGMsYyl9Zj9iW2RdPXZvaWQgMD09PWUucGFyYW18fGUucGFyYW06KGEuZGF0YShjLmZvcm0sXCJ2YWxpZGF0b3JcIikucmVzZXRFbGVtZW50cyhhKGMpKSxkZWxldGUgYltkXSl9fSksYS5lYWNoKGIsZnVuY3Rpb24oZCxlKXtiW2RdPWEuaXNGdW5jdGlvbihlKSYmXCJub3JtYWxpemVyXCIhPT1kP2UoYyk6ZX0pLGEuZWFjaChbXCJtaW5sZW5ndGhcIixcIm1heGxlbmd0aFwiXSxmdW5jdGlvbigpe2JbdGhpc10mJihiW3RoaXNdPU51bWJlcihiW3RoaXNdKSl9KSxhLmVhY2goW1wicmFuZ2VsZW5ndGhcIixcInJhbmdlXCJdLGZ1bmN0aW9uKCl7dmFyIGM7Ylt0aGlzXSYmKGEuaXNBcnJheShiW3RoaXNdKT9iW3RoaXNdPVtOdW1iZXIoYlt0aGlzXVswXSksTnVtYmVyKGJbdGhpc11bMV0pXTpcInN0cmluZ1wiPT10eXBlb2YgYlt0aGlzXSYmKGM9Ylt0aGlzXS5yZXBsYWNlKC9bXFxbXFxdXS9nLFwiXCIpLnNwbGl0KC9bXFxzLF0rLyksYlt0aGlzXT1bTnVtYmVyKGNbMF0pLE51bWJlcihjWzFdKV0pKX0pLGEudmFsaWRhdG9yLmF1dG9DcmVhdGVSYW5nZXMmJihudWxsIT1iLm1pbiYmbnVsbCE9Yi5tYXgmJihiLnJhbmdlPVtiLm1pbixiLm1heF0sZGVsZXRlIGIubWluLGRlbGV0ZSBiLm1heCksbnVsbCE9Yi5taW5sZW5ndGgmJm51bGwhPWIubWF4bGVuZ3RoJiYoYi5yYW5nZWxlbmd0aD1bYi5taW5sZW5ndGgsYi5tYXhsZW5ndGhdLGRlbGV0ZSBiLm1pbmxlbmd0aCxkZWxldGUgYi5tYXhsZW5ndGgpKSxifSxub3JtYWxpemVSdWxlOmZ1bmN0aW9uKGIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBiKXt2YXIgYz17fTthLmVhY2goYi5zcGxpdCgvXFxzLyksZnVuY3Rpb24oKXtjW3RoaXNdPSEwfSksYj1jfXJldHVybiBifSxhZGRNZXRob2Q6ZnVuY3Rpb24oYixjLGQpe2EudmFsaWRhdG9yLm1ldGhvZHNbYl09YyxhLnZhbGlkYXRvci5tZXNzYWdlc1tiXT12b2lkIDAhPT1kP2Q6YS52YWxpZGF0b3IubWVzc2FnZXNbYl0sYy5sZW5ndGg8MyYmYS52YWxpZGF0b3IuYWRkQ2xhc3NSdWxlcyhiLGEudmFsaWRhdG9yLm5vcm1hbGl6ZVJ1bGUoYikpfSxtZXRob2RzOntyZXF1aXJlZDpmdW5jdGlvbihiLGMsZCl7aWYoIXRoaXMuZGVwZW5kKGQsYykpcmV0dXJuXCJkZXBlbmRlbmN5LW1pc21hdGNoXCI7aWYoXCJzZWxlY3RcIj09PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7dmFyIGU9YShjKS52YWwoKTtyZXR1cm4gZSYmZS5sZW5ndGg+MH1yZXR1cm4gdGhpcy5jaGVja2FibGUoYyk/dGhpcy5nZXRMZW5ndGgoYixjKT4wOmIubGVuZ3RoPjB9LGVtYWlsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub3B0aW9uYWwoYil8fC9eW2EtekEtWjAtOS4hIyQlJicqK1xcLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLnRlc3QoYSl9LHVybDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9wdGlvbmFsKGIpfHwvXig/Oig/Oig/Omh0dHBzP3xmdHApOik/XFwvXFwvKSg/OlxcUysoPzo6XFxTKik/QCk/KD86KD8hKD86MTB8MTI3KSg/OlxcLlxcZHsxLDN9KXszfSkoPyEoPzoxNjlcXC4yNTR8MTkyXFwuMTY4KSg/OlxcLlxcZHsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlxcZHwzWzAtMV0pKD86XFwuXFxkezEsM30pezJ9KSg/OlsxLTldXFxkP3wxXFxkXFxkfDJbMDFdXFxkfDIyWzAtM10pKD86XFwuKD86MT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNF0pKXwoPzooPzpbYS16XFx1MDBhMS1cXHVmZmZmMC05XS0qKSpbYS16XFx1MDBhMS1cXHVmZmZmMC05XSspKD86XFwuKD86W2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0tKikqW2EtelxcdTAwYTEtXFx1ZmZmZjAtOV0rKSooPzpcXC4oPzpbYS16XFx1MDBhMS1cXHVmZmZmXXsyLH0pKS4/KSg/OjpcXGR7Miw1fSk/KD86Wy8/I11cXFMqKT8kL2kudGVzdChhKX0sZGF0ZTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9wdGlvbmFsKGIpfHwhL0ludmFsaWR8TmFOLy50ZXN0KG5ldyBEYXRlKGEpLnRvU3RyaW5nKCkpfSxkYXRlSVNPOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub3B0aW9uYWwoYil8fC9eXFxkezR9W1xcL1xcLV0oMD9bMS05XXwxWzAxMl0pW1xcL1xcLV0oMD9bMS05XXxbMTJdWzAtOV18M1swMV0pJC8udGVzdChhKX0sbnVtYmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub3B0aW9uYWwoYil8fC9eKD86LT9cXGQrfC0/XFxkezEsM30oPzosXFxkezN9KSspPyg/OlxcLlxcZCspPyQvLnRlc3QoYSl9LGRpZ2l0czpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9wdGlvbmFsKGIpfHwvXlxcZCskLy50ZXN0KGEpfSxtaW5sZW5ndGg6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEuaXNBcnJheShiKT9iLmxlbmd0aDp0aGlzLmdldExlbmd0aChiLGMpO3JldHVybiB0aGlzLm9wdGlvbmFsKGMpfHxlPj1kfSxtYXhsZW5ndGg6ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEuaXNBcnJheShiKT9iLmxlbmd0aDp0aGlzLmdldExlbmd0aChiLGMpO3JldHVybiB0aGlzLm9wdGlvbmFsKGMpfHxlPD1kfSxyYW5nZWxlbmd0aDpmdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5pc0FycmF5KGIpP2IubGVuZ3RoOnRoaXMuZ2V0TGVuZ3RoKGIsYyk7cmV0dXJuIHRoaXMub3B0aW9uYWwoYyl8fGU+PWRbMF0mJmU8PWRbMV19LG1pbjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub3B0aW9uYWwoYil8fGE+PWN9LG1heDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub3B0aW9uYWwoYil8fGE8PWN9LHJhbmdlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vcHRpb25hbChiKXx8YT49Y1swXSYmYTw9Y1sxXX0sc3RlcDpmdW5jdGlvbihiLGMsZCl7dmFyIGUsZj1hKGMpLmF0dHIoXCJ0eXBlXCIpLGc9XCJTdGVwIGF0dHJpYnV0ZSBvbiBpbnB1dCB0eXBlIFwiK2YrXCIgaXMgbm90IHN1cHBvcnRlZC5cIixoPVtcInRleHRcIixcIm51bWJlclwiLFwicmFuZ2VcIl0saT1uZXcgUmVnRXhwKFwiXFxcXGJcIitmK1wiXFxcXGJcIiksaj1mJiYhaS50ZXN0KGguam9pbigpKSxrPWZ1bmN0aW9uKGEpe3ZhciBiPShcIlwiK2EpLm1hdGNoKC8oPzpcXC4oXFxkKykpPyQvKTtyZXR1cm4gYiYmYlsxXT9iWzFdLmxlbmd0aDowfSxsPWZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGEqTWF0aC5wb3coMTAsZSkpfSxtPSEwO2lmKGopdGhyb3cgbmV3IEVycm9yKGcpO3JldHVybiBlPWsoZCksKGsoYik+ZXx8bChiKSVsKGQpIT09MCkmJihtPSExKSx0aGlzLm9wdGlvbmFsKGMpfHxtfSxlcXVhbFRvOmZ1bmN0aW9uKGIsYyxkKXt2YXIgZT1hKGQpO3JldHVybiB0aGlzLnNldHRpbmdzLm9uZm9jdXNvdXQmJmUubm90KFwiLnZhbGlkYXRlLWVxdWFsVG8tYmx1clwiKS5sZW5ndGgmJmUuYWRkQ2xhc3MoXCJ2YWxpZGF0ZS1lcXVhbFRvLWJsdXJcIikub24oXCJibHVyLnZhbGlkYXRlLWVxdWFsVG9cIixmdW5jdGlvbigpe2EoYykudmFsaWQoKX0pLGI9PT1lLnZhbCgpfSxyZW1vdGU6ZnVuY3Rpb24oYixjLGQsZSl7aWYodGhpcy5vcHRpb25hbChjKSlyZXR1cm5cImRlcGVuZGVuY3ktbWlzbWF0Y2hcIjtlPVwic3RyaW5nXCI9PXR5cGVvZiBlJiZlfHxcInJlbW90ZVwiO3ZhciBmLGcsaCxpPXRoaXMucHJldmlvdXNWYWx1ZShjLGUpO3JldHVybiB0aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2MubmFtZV18fCh0aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2MubmFtZV09e30pLGkub3JpZ2luYWxNZXNzYWdlPWkub3JpZ2luYWxNZXNzYWdlfHx0aGlzLnNldHRpbmdzLm1lc3NhZ2VzW2MubmFtZV1bZV0sdGhpcy5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdW2VdPWkubWVzc2FnZSxkPVwic3RyaW5nXCI9PXR5cGVvZiBkJiZ7dXJsOmR9fHxkLGg9YS5wYXJhbShhLmV4dGVuZCh7ZGF0YTpifSxkLmRhdGEpKSxpLm9sZD09PWg/aS52YWxpZDooaS5vbGQ9aCxmPXRoaXMsdGhpcy5zdGFydFJlcXVlc3QoYyksZz17fSxnW2MubmFtZV09YixhLmFqYXgoYS5leHRlbmQoITAse21vZGU6XCJhYm9ydFwiLHBvcnQ6XCJ2YWxpZGF0ZVwiK2MubmFtZSxkYXRhVHlwZTpcImpzb25cIixkYXRhOmcsY29udGV4dDpmLmN1cnJlbnRGb3JtLHN1Y2Nlc3M6ZnVuY3Rpb24oYSl7dmFyIGQsZyxoLGo9YT09PSEwfHxcInRydWVcIj09PWE7Zi5zZXR0aW5ncy5tZXNzYWdlc1tjLm5hbWVdW2VdPWkub3JpZ2luYWxNZXNzYWdlLGo/KGg9Zi5mb3JtU3VibWl0dGVkLGYucmVzZXRJbnRlcm5hbHMoKSxmLnRvSGlkZT1mLmVycm9yc0ZvcihjKSxmLmZvcm1TdWJtaXR0ZWQ9aCxmLnN1Y2Nlc3NMaXN0LnB1c2goYyksZi5pbnZhbGlkW2MubmFtZV09ITEsZi5zaG93RXJyb3JzKCkpOihkPXt9LGc9YXx8Zi5kZWZhdWx0TWVzc2FnZShjLHttZXRob2Q6ZSxwYXJhbWV0ZXJzOmJ9KSxkW2MubmFtZV09aS5tZXNzYWdlPWcsZi5pbnZhbGlkW2MubmFtZV09ITAsZi5zaG93RXJyb3JzKGQpKSxpLnZhbGlkPWosZi5zdG9wUmVxdWVzdChjLGopfX0sZCkpLFwicGVuZGluZ1wiKX19fSk7dmFyIGIsYz17fTtyZXR1cm4gYS5hamF4UHJlZmlsdGVyP2EuYWpheFByZWZpbHRlcihmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5wb3J0O1wiYWJvcnRcIj09PWEubW9kZSYmKGNbZV0mJmNbZV0uYWJvcnQoKSxjW2VdPWQpfSk6KGI9YS5hamF4LGEuYWpheD1mdW5jdGlvbihkKXt2YXIgZT0oXCJtb2RlXCJpbiBkP2Q6YS5hamF4U2V0dGluZ3MpLm1vZGUsZj0oXCJwb3J0XCJpbiBkP2Q6YS5hamF4U2V0dGluZ3MpLnBvcnQ7cmV0dXJuXCJhYm9ydFwiPT09ZT8oY1tmXSYmY1tmXS5hYm9ydCgpLGNbZl09Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyksY1tmXSk6Yi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxhfSk7Il0sImZpbGUiOiJqcXVlcnkudmFsaWRhdGUubWluLmpzIn0=